<?php
// 无限分类1
$rows=array(
    array(
        'id'=>'1',
        'name'=>'php',
        'pid'=>'0',
        'path'=>'0'
    ),
    array(
        'id'=>'2',
        'name'=>'linux',
        'pid'=>'0',
        'path'=>'0'
    ),
    array(
        'id'=>'3',
        'name'=>'系统安装',
        'pid'=>'2',
        'path'=>'0-2'
    ),
    array(
        'id'=>'4',
        'name'=>'文件上传',
        'pid'=>'1',
        'path'=>'0-1'
    ),
    array(
        'id'=>'5',
        'name'=>'硬盘分析',
        'pid'=>'3',
        'path'=>'0-2-3'
    ),
    array(
        'id'=>'6',
        'name'=>'软件安装',
        'pid'=>'3',
        'path'=>'0-2-3'
    ),
    array(
        'id'=>'7',
        'name'=>'java',
        'pid'=>'0',
        'path'=>'0'
    ),

);

foreach($rows as &$row){
    $num=substr_count($row['path'],'-'); //计算-的个数
    if($row['pid']>0){
        $pre='|'.str_repeat('-',$num); //连续多少次重复出现-个数
    }else{
        // $pre=str_repeat('-',$num);
        $pre='';
    }
    // 由于上面遍历的时候写了地址传值符&,所以下面可以直接给$row 赋值
    $row['tree']=$pre.$row['name'];  //数组中加个元素
   
}
// 遍历赋值一个新的数组，用来排序
foreach($rows as $row2){
    $arr[]=$row2['path'].'-'.$row2['id'];
}

//通过$arr 给$rows排序
array_multisort($arr,$rows); 

// 遍历输出
foreach($rows as $row3){
    echo "<p>{$row3['tree']}</p>";
}


// echo "<pre>";
// print_r($rows);
// echo "</pre>";


?>